perm filename PPK.FAI[HAK,HPM]1 blob
sn#279942 filedate 1977-05-06 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE PPK
C00003 00003 START: MOVE C,[-1,,[015000,,D]]
C00005 00004 MOVE A,LINN
C00006 00005 BEG2A: MOVEM A,LINN
C00010 00006 LINED: MOVE DAT,@LEENT append line editor
C00013 00007 LFEND: SKIPN NEEDLF check if last line had lf
C00015 00008 DISP1: MOVEI C,0
C00017 00009 RCHNW: MOVE C,[700,,WRD-1]
C00018 00010 APNT: (A). RH GETS CLOBBERED AT SETPR2 TIME
C00028 ENDMK
C⊗;
TITLE PPK
A←1
B←2
C←3
D←4
E←5
f←6
ppos← 7
pnt←10
len←11
NLFS←12
spos←13
DAT←14
CB←T←15
TT←16
P←17
LPDL←←69
BFSZ←←10000
SYSTOP←←265
CHKBEG←←223
LEBUF←←330 ;Displacement of actual line editor buffer from beginning of dpy hdr
START: MOVE C,[-1,,[015000,,D]]
TTYSET C, ;get display height in D
SUBI D,2 ;-2 for who line
MOVEM D,DPYHT
SETOM LINN
BEG: MOVE P,[-LPDL,,PDL]
MOVEI A,LEBUF
PEEK A,
MOVEM A,DLEBUF ;Displacement of editor buffer from dpy hdr addr
MOVEI A,CHKBEG
PEEK A,
MOVEM A,CCHKBEG
LSH A,-9 ;# LO PIECE PAGES
MOVEI B,SYSTOP
PEEK B,
PEEK B,
MOVE C,CCHKBEG
SUB C,B
MOVEM C,CBMST ;CHKBEG-SYSTOP
LSH B,-9+5 ;STARTING HI PIECE PAGE # * 40
ADDI B,10 ;SET 2-PIECE FLAG
HRL B,A
GETHI B,
JRST 4,.
MOVE A,400321
HLRZM A,TBLKPT
HRRZM A,TPJMP
MOVE A,400322
HRRZM A,PPCALL
MOVE A,400236
MOVEM A,JBTLIN
MOVE A,400237
MOVEM A,LETAB
MOVE A,LINN
JUMPGE A,BEG2
OUTSTR [ASCIZ/Line? /]
NXCH: INCHWL A
HACH: CAIN A,175
JRST [ EXIT ↔ JRST START ]
CAIN A,15
JRST [ INCHWL
EXIT
JRST START]
CAIE A,11
CAIN A,40
JRST NXCH
SUBI A,60
REELUP: INCHWL C
CAIN C,15
JRST [INCHRW T
JRST BEG3A]
LSH A,3
ADDI A,-"0"(C)
JRST REELUP
BEG3A:
PTWR1W [0 ↔ 10041] ;generate <brk> line# W
MOVEI B,0
MOVE C,A
LSH C,-6
ADDI C,60
PTWR1W B
MOVE C,A
LSH C,-3
ANDI C,7
ADDI C,60
PTWR1W B
MOVE C,A
ANDI C,7
ADDI C,60
PTWR1W B
PTWR1W [0 ↔ 127]
BEG2A: MOVEM A,LINN
BEG2: ADD A,LETAB
MOVEI B,400000-20(A)
MOVEM B,LEENT
HRRZ A,400000-20(A)
JUMPE A,[ OUTSTR [ASCIZ/Not in use or not a display.
/]
JRST START]
MOVE T,CBMST
ADDI T,400000
HRRM T,APNT
SUBI T,2
HRLI T,-20
MOVSM T,JMPOFF
ADD A,PPCALL
HLRZ A,@APNT
MOVEI B,1(A)
ADD B,TPJMP
HRLM B,ENDTST
ADD A,TBLKPT
HRRZ A,@APNT
ADD A,APNT
HRLI A,444400
MOVEM A,WRDP
SETZM CCNT
MOVNI A,69
MOVEM A,BLKCNT
MOVEI F,0
MOVEI NLFS,0
MOVEI LEN,0
MOVE PNT,[POINT 7,PPAGE+2]
LF1: PUSHJ P,RCH
JRST LINED
CAIN C,12
JUMPE F,[ MOVEI C,40
IDPB C,PNT
MOVEI C,15
IDPB C,PNT
MOVEI C,12
IDPB C,PNT
ADDI LEN,3
ADDI NLFS,1
JRST LF1]
MOVE F,C
SUBI F,12
IDPB C,PNT
CAIN C,12
JRST [ADDI NLFS,1
AOJA LEN,LF1]
AOJA LEN,LF1
MOVEM F,NEEDLF#
LINED: MOVE DAT,@LEENT ; append line editor
SKIPN DAT
JRST LFEND
ADD DAT,DLEBUF ;Point to buffer itself
HRRZ CB,CCHKBEG ;BREAK IN NON-SHUFFLING SYSTEM
CAIGE CB,(DAT) ;PAST BREAK IN SYSTEM?
ADD DAT,CBMST ;ADD CHKBEG-SYSTOP
ADDI DAT,400000 ;I CONTAINS RELOCATION OF SYSTEM
MOVE F,DAT ;Make copy of pointer for depositing
MOVEI A,1
LIE: TDNE A,(DAT) ;Is this a text word?
AOJA DAT,LIE ;Yes
CNTDN: CAMN F,DAT
JRST LFEND ;Empty line editor
HRLI F,440700
SUBI DAT,1 ;Point to last real text word in buffer
HRLI DAT,100700 ;Byte pointer to char before EOLCHR in buffer
MOVEM LEN,SAVLEN# ;in case LE ends with crlf(ie its been sent),
MOVEM PNT,SAVPNT# ;save len and pnt so we can back up
LECS: CAMN F,DAT ;check if end overstepped
JRST LFOO
ILDB C,F
CAIE C,177
CAIN C,14 ;stop on funny characters
JRST LFOO
CAIE C,13
CAIN C,0
JRST LFOO
CAIE C,15 ;if line ends in <cr> or <lf>
CAIN C,12 ;its already been sent, dont dpy it
JRST BACKUP
CAIN C,175
JRST BACKUP
IDPB C,PNT ;normally, deposit
AOJA LEN,LECS ;and account
LFOO: SETOM NEEDLF ;we didn't insert crlf
JRST LFEND
BACKUP: MOVE PNT,SAVPNT ;restore depositing byte pntr
MOVE LEN,SAVLEN ;and character cnt
LFEND: SKIPN NEEDLF ;check if last line had lf
JRST LFDONE ;if so, don't add extra one
MOVEI C,40
IDPB C,PNT ;otherwise add space cr lf
MOVEI C,15
IDPB C,PNT
MOVEI C,12
IDPB C,PNT
ADDI LEN,3
ADDI NLFS,1
LFDONE: CAMN NLFS,DPYHT ;if just right number of lines
JRST DISP1 ;display immediately
CAML NLFS,DPYHT ;if too few
JRST SQUISH
SPLOO: MOVEI C,40 ;add blank lines
IDPB C,PNT
MOVEI C,15
IDPB C,PNT
MOVEI C,12
IDPB C,PNT
ADDI LEN,3
ADDI NLFS,1
CAMGE NLFS,DPYHT
JRST SPLOO
JRST DISP1
SQUISH: MOVE A,[POINT 7,PPAGE+2] ;must be too many lines, remove some
SQUASH: ILDB C,A
CAIE C,12
JRST SQUASH
SUBI NLFS,1
CAMLE NLFS,DPYHT
JRST SQUASH
MOVE PNT,[POINT 7,PPAGE+2]
SETZ LEN,
SQUOSH: ILDB C,A
IDPB C,PNT
ADDI LEN,1
CAIE C,12
JRST SQUOSH
SOJG NLFS,SQUOSH
MOVE NLFS,DPYHT
DISP1: MOVEI C,0
REPEAT 10,{IDPB C,PNT}
movei c,6(len) ;find number of words for string
idivi c,5
addi c,3+1
hrrm c,buffpt+1
movni a,1
getlin a ;get type of terminal
TLNE A,40000
JRST [MOVE B,DMAGE ;its a DM
MOVEM B,PPAGE
MOVE B,DMAGE+1
MOVEM B,PPAGE+1
JRST GIOT]
tlne a,20000
JRST [MOVE B,DDAGE ;its a DD
MOVEM B,PPAGE
MOVE B,DDAGE+1
MOVEM B,PPAGE+1
JRST GIOT]
TLNE A,400000
JRST [MOVE B,IIAGE ;its a III
MOVEM B,PPAGE
MOVE B,IIAGE+1
MOVEM B,PPAGE+1
PGACT 400000
DPYPOS -1000
JRST GIOT]
JRST [outstr PPAGE+2 ;not a dd - let outstr handle it.
JRST PRTD]
GIOT: UPGIOT BUFFPT
SETOM PPAGE-1(C) ;set low order bit (DD UPG's clobber it)
PRTD: MOVEI A,1
SLEEP A,
MOVE A,LINN
INCHRS B
JRST BEG
CAIN B,175
JRST ALOU
CAIN B,15
JRST [INCHRW B
ALOU: RESET
PTWR1W [0 ↔ 10041] ;<brk>P to reset page pr.
PTWR1W [0 ↔ 120]
PTWR1W [0 ↔ 10042] ;<esc>W to get own wholine.
PTWR1W [0 ↔ 127]
MOVEI A,1
SLEEP A,
EXIT
JRST START]
MOVE A,B
JRST HACH
RCHNW: MOVE C,[700,,WRD-1]
MOVEM C,CHRP
MOVEI C,5
MOVEM C,CCNT
RCHNW2: ILDB C,WRDP
TRNN C,1
JRST RCHNB
MOVEM C,WRD
RCH: SOSGE CCNT
JRST RCHNW
ILDB C,CHRP
JUMPE C,RCH
AOS (P)
CPOPJ: POPJ P,
RCHNB: CAMN C,ENDTST
POPJ P,
ADD C,JMPOFF
TRNN C,-1
AOSLE BLKCNT
POPJ P,
HLRM C,WRDP
JRST RCHNW2
APNT: (A). ;RH GETS CLOBBERED AT SETPR2 TIME
WRD: 0↔-1
ENDTST: 20
IBUF: BLOCK 3
OBUF: BLOCK 3
ENTR: BLOCK 4
FILE: BLOCK 4
PDL: BLOCK LPDL
EXIT
JBTLIN: 0
LETAB: 0
PPCALL: 0
TPJMP: 0
TBLKPT: 0
DPYHT: 0
LINN: 0
CHRP: 0
BLKCNT: 0
CCNT: 0
WRDP: 0
JMPOFF: 0
LEENT: 0
CBMST: 0
DLEBUF: 0
CCHKBEG: 0
buffpt: 200000,,PPAGE ;double field mode
0
0
PPAGE+1
ersbuf: BYTE (8) 17,0,46 (3) 1,2,1,4 ;funct. code, chan select, funct. code
0
erspt: ersbuf
erspt-ersbuf
0
0
DDAGE: BYTE (8) 46,0,46 (3) 1,2,1,4
BYTE (8) 2,1,10 (3)3,4,5,4
DMAGE: BYTE (7) 177,30,177,30,177
BYTE (7) 30,177,14,140,142
IIAGE: BYTE (11) -1000,700 (3) 0,0 (1) 0,1 (2) 2 (4) 6
BYTE (11) -1000,700 (3) 0,0 (1) 0,1 (2) 2 (4) 6
PPAGE: BYTE (8) 46,0,46 (3) 1,2,1,4
BYTE (8) 2,1,10 (3)3,4,5,4
REPEAT BFSZ,{1}
END START